【问题标题】:In C# is there a way to convert a linked list to a string?在 C# 中有没有办法将链表转换为字符串?
【发布时间】:2021-11-24 09:23:34
【问题描述】:

在 C# 中有没有办法将链表转换为字符串?

我有一个链接的句子列表和另一个链接的单词列表。 我想检查单词链表中单词的句子链表,并认为一个好的方法是将单词链表转换为字符串。

还考虑使用嵌套的while循环。

【问题讨论】:

  • 可能不是正确的方法。你可能需要sentences.Where(s => words.Any(s.Contains))
  • 也许将单词列表编译成一个正则表达式并遍历句子列表以找到匹配的模式。
  • 你能分享一下你到目前为止的尝试吗?
  • built-in LinkedList<T> class 实现IEnumerable<T>; string.Join 方法有一个接受 IEnumerable<T> 的重载。你为什么不能把你的名单传给string.Join
  • 此外,LinkedList 很少是最好的数据结构。在绝大多数情况下,常规列表会更好。 This question explains why,是c++用的,c#也是一样的。

标签: c# linked-list


【解决方案1】:

正在考虑一个好的方法是将单词链表转换为字符串。

任何时候你有一个 X 的列表和一个 Y 的列表,并且你想检查 X 中的任何元素是否在 Y 中,你需要的可能是一个哈希集(而不是一个列表)

哈希集提供固定值的快速查找。你的算法应该是:

  • 将搜索列表加载到集合中
  • 枚举入入列表,反复询问当前项是否在集合中
    var hs = listOfWords.ToHashSet();

    foreach(var sentence in listOfSentences){
      foreach(var word in sentence.Split()){
        if(hs.Contains(word))
        {
          ...
        }
      }
    }

或采用 LINQ 风格的方法

    var hs = listOfWords.ToHashSet();

    var result = listOfSentences.Where(sentence=> 
       sentence.Split().Any(word => 
           hs.Contains(word)
       )
    );

警告:默认情况下,字符串的 c# 散列是区分大小写的,并且每个字符都有助于字符串相等。对于"hello","world","foo","bar" 的单词列表和以下句子的列表:"Hello world!", "Foo bar." - 这些句子不包含单词列表中的任何单词。 Hello 不等于 helloworld! 不等于 world。仔细处理您的句子,以便将苹果与苹果进行比较 - 例如。去掉标点符号,让大小写相等,例如

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2023-01-27
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多