V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
innoink
V2EX  ›  问与答

find 和 search 的区别?

  •  
  •   innoink · 2018-01-24 22:09:14 +08:00 · 7386 次点击
    这是一个创建于 2524 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如,想要表达如下的意思,应该用哪个单词:

    想在目录中找一个文件,应该用 find 还是 search ?

    想在文本中找一个单词,应该用 find 还是 search ?

    想用搜索引擎找一个页面,应该用 find 还是 search ?

    假如你要写一个用于从某些东西里面找出符合条件的一部分东西的函数,这个函数名在什么情况下应该用 find,什么情况下用 search ?

    这些情况下分别应该翻译成查找还是搜索?有何区别?
    26 条回复    2018-01-25 10:50:24 +08:00
    h4lbhg1G
        1
    h4lbhg1G  
       2018-01-24 22:12:17 +08:00
    find 一般是索引查找返回 index,search(多半是正则等复杂的查找)返回结果?完全没道理地臆测下。
    geelaw
        2
    geelaw  
       2018-01-24 22:24:59 +08:00
    从词典考虑,find 是找到,search 是去找。

    从用法上考虑,一般 find text in a document,但是 search files in a folder, search "some keywords" with Google, search the Internet。

    如果要写一个查找规律的东西,有以下几种选择:

    - Collection.Where
    - string.Find
    - RegExp.Match
    - ShellFolder.Search
    mringg
        3
    mringg  
       2018-01-24 22:25:58 +08:00 via iPhone
    我想起 look for 和 find 了
    McTaylor
        4
    McTaylor  
       2018-01-24 22:27:37 +08:00
    find 是要找到,
    search 是搜索遍历一次数组
    hsuan
        5
    hsuan  
       2018-01-24 22:28:32 +08:00 via Android
    没有区别
    SuperMild
        6
    SuperMild  
       2018-01-24 22:34:15 +08:00
    感觉 search 是带有更明确的目的,更有计划、规律。find 更盲目一点,凭感觉去发现。
    innoink
        7
    innoink  
    OP
       2018-01-24 22:35:12 +08:00
    @geelaw linux 命令行 find 是查找文件的,各种编辑器的查找功能都叫 find,grep 叫 Globally search a Regular Expression and Print,AG 叫 the silver searcher,emacs 的查找是 Incremental Search,C++STL 里面既有 search 又有 find,还有个 find_end 和 search 完全相同只不过是倒序,二分查找叫 bsearch ……
    我感觉很混乱
    SuperMild
        8
    SuperMild  
       2018-01-24 22:38:32 +08:00
    比如想在文本中找一个单词,凭肉眼快速浏览一下,用 find 好点,但如果用 Ctrl+F 的功能去找则用 search 好点。还有“就是找出图中最先看到的一个单词,预测你今天的运气”,这种单词都不确定的情况,就只能用 find 不能用 search 了。
    winterbells
        9
    winterbells  
       2018-01-24 22:41:50 +08:00
    I found you. 我找到你了
    I searched you. 我查找你了
    northisland
        10
    northisland  
       2018-01-24 23:07:10 +08:00
    search 更庞大,find 比较简单。

    find 是文件级别
    search 就可以是个引擎了
    有本名著叫<the Search for Modern China>(《追寻现代中国》),search 这个词往大了用,可以用来描述 500 年追求现代化的过程~~~~
    zhangxiao
        11
    zhangxiao  
       2018-01-24 23:10:45 +08:00
    感觉 find 目的性更明确,能准确描述要找的目标。search 相对模糊一些。
    geelaw
        12
    geelaw  
       2018-01-24 23:46:45 +08:00 via iPhone
    @innoink search a file 和 search files in a folder 不一样,前者更倾向于在文件里面搜索。grep 的解释很简单,因为 grep 找到的东西不是 regex 所以不可能是 find a regex,search X 可以表达 find a match of X 的意思。
    lxy
        13
    lxy  
       2018-01-24 23:50:33 +08:00
    这种 google 一下 what's different between find and search 就有的回答
    innoink
        14
    innoink  
    OP
       2018-01-25 00:20:53 +08:00 via Android
    @lxy 那你能不能给我找一下,为什么“在文件中搜索”这个行为,在一般的编辑器(比如 atom )叫 find,快捷键 ctrl-f,但相同的行为在 grep、ag、emacs 中却都叫 search,这两种到底有什么区别
    innoink
        15
    innoink  
    OP
       2018-01-25 00:22:17 +08:00 via Android
    @lxy 还有,为什么有的地方翻译成查找,有的地方翻译成搜索,查找 和 搜索之间有什么区别
    hguandl
        16
    hguandl  
       2018-01-25 00:46:11 +08:00   ❤️ 1
    0. LZ 有点钻牛角尖,但是我也喜欢这样 /逃

    查了下牛津高阶词典第七版:

    find - > BY SEARCHING 2 to get back sth/sb that was lost after searching for it/them

    search - 1 to look carefully for sth/sb; to examine a particular place when looking for sb/sth

    在我理解就是 search 是 find 的过程,或许可以理解为 find = search & get。换句话说就是 search 单单指用一定算法进行匹配的过程,无所谓找没找到,跑完即可;而 find 隐含一层是否找到的意思,就是经过 search 后是否有能 get 到的内容。以上瞎编,这只是强行区别,在实际函数方法的使用上,除了名字不同真的没有任何区别,不过感觉上 find 有点倾向于自然语言的说法,而 search 比较学术。
    innoink
        17
    innoink  
    OP
       2018-01-25 02:11:06 +08:00 via Android
    @hguandl 我就是在写代码的时候,想写一个查找功能的函数,我以前都用 find,毕竟 ctrl-f 习惯了;然而最近在学 emacs,突然一想,查找也可能是 search 啊
    我知道 find 侧重结果,search 侧重过程,但是这在英文语境中才能体现,在代码中体现不出来
    然后又想到
    在 excel 中,同时存在 search 和 find 两个函数,而区别是大小写敏感和通配符,和“侧重过程还是侧重结果”并没有关系
    stl 中也同时存在 search、find、search_n、find_end、find_first_of 等函数,都是大同小异,不明白为什么不全用 find 或者全用 search 前缀
    然后又想到
    同样是 search,search engine 被翻译成搜索引擎,binary search 却是二分查找,depth first search 又是深度优先搜索……
    yangqi
        18
    yangqi  
       2018-01-25 02:28:36 +08:00
    都是找,但是 find 强调的是结果,search 强调的是过程

    如果函数里面的话,search 可以理解为搜索,目标不是很明确,或者有很多,一般会返回所有结果。find 可以理解为寻找,目标比较明确,一般找到第一个就返回结果
    innoink
        19
    innoink  
    OP
       2018-01-25 02:38:32 +08:00 via Android
    @yangqi 实际上,python 的正则就不是这样的行为
    yangqi
        20
    yangqi  
       2018-01-25 02:48:46 +08:00
    @innoink #19 都说了是一般情况,并且也没有严格的对与错。这种较真毫无意义
    innoink
        21
    innoink  
    OP
       2018-01-25 02:55:07 +08:00 via Android
    @yangqi 既然是一般情况,我想你应该能说出几个
    “ search 可以理解为搜索,目标不是很明确,或者有很多,一般会返回所有结果。find 可以理解为寻找,目标比较明确,一般找到第一个就返回结果”
    的案例吧?反正我现在是没找到哪个语言、哪个库是这么设计的
    yangqi
        22
    yangqi  
       2018-01-25 03:08:39 +08:00
    @innoink #21 我说的一般情况并不是指那个语言或者库。我说的是软件开发里面自己定义的函数,楼主问的也是这个。根据英文的含义来理解比较自然,当然软件开发关键还是要看文档,所以函数怎么命名只有好坏,没有对错。
    h4lbhg1G
        23
    h4lbhg1G  
       2018-01-25 04:19:42 +08:00
    @innoink 好了你有明确的例子,我就好解(qiang)释(xing)了。

    我先说下结论,find 就是简单的线性表查找。比如字符串查找,文本编辑器 Ctrl+F 查找(这里就不要较真正则表达式了)。如果用到了数据结构树或者图或者认为算法很高级,一般就说是 search 了。也就是高大上一点的叫做 search,简单平庸的叫做 find。

    大部分语言的字符串的 find 应该都是普通的线性查找,并且返回下标。

    用 STL 来解释,binary search 因为属于比较高级,英文叫做 find,中文认为太简单叫做查找。而深度优先,相对比较复杂就都叫做搜索。search_n 比较高级。find_end 比较简单。


    Excel 也可以解释,find 区分大小写,从程序角度比较简单,search 不区分大小写,相对比较高级。
    KeepPro
        24
    KeepPro  
       2018-01-25 09:07:14 +08:00 via Android
    感觉 find 强调 找到 这个动作,而 search 偏向于研究探索。
    Mutoo
        25
    Mutoo  
       2018-01-25 09:48:36 +08:00
    https://stackoverflow.com/questions/480811/semantic-difference-between-find-and-search
    这个讨论值得参考。

    TLDR: find 是 search 的完成态。find 会得到一个明确的结果(有明确的目标),而 search 可能得到 0 个或多个结果(设定某种标准)。例如 find a php job / search jobs with php
    innoink
        26
    innoink  
    OP
       2018-01-25 10:50:24 +08:00
    @Mutoo 卧槽我怎么没搜到这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1299 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:15 · PVG 01:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.