按数组中定义的顺序对字符串列表进行排序的有效方法?

马特·沃特曼

我试图按另一个数组中定义的顺序对字符串列表进行排序。我知道可以通过多种方式来实现,但是我不确定如何有效地做到这一点。我需要它能够处理大量的未排序列表,其中包含数千个项目。这是我想出的:

List<string> sortStringListByArray(List<string> unsortedList, string[] order)
{
     List<string> sortedList = new List<string>();
     for(int i = 0; i < order.Length; i++)
     {
          foreach(string s in unsortedList)
          {
              if(s.Equals(order[i]))
              {
                  sortedList.Add(s);
              }
          }
     }
     return sortedList;
}

它可以按预期工作,但绝对无效。我有什么办法可以在不遍历列表和订单的情况下做到这一点?

编辑:澄清

谢谢!

斯莱

表示它的最简单方法是使用正确的内部联接:

return order.Join(unsortedList, a => a, b => b, (a, b) => b).ToList();

最好的时间复杂度是使用Lookup或Dictionary的O(n + m):

var lookup = unsortedList.ToLookup(x => x);

return order.SelectMany(x => lookup[x]).ToList();

通过使用Dictionary<string, int>来获取中的项目计数unsortedList,然后order基于counts字典中的相应值进行循环生成结果,可以使上述速度快几倍


LookupDictionary使用哈希表存储值。为了在哈希表中查找项目,需要根据该值计算哈希值,该值类似于哈希表中该值的估计位置/索引。这仅需要1个或很少的比较,即可查找(或不查找)哈希表中的值。因此,O(n)从中生成Lookup或Dictionary unsortedList,并且由于哈希表的平均查找时间为O(1),因此仅使用O(m)时间就可以使用Lookup或Dictionary生成结果,从而得出O(n + m)时间复杂度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于Ruby on Rails中定义的数组的最有效的按字符串排序的方法

如何按字母顺序对字符串列表进行排序?

按数字部分的顺序对字符串列表进行排序

无法在C中按字母顺序对字符串列表进行排序

在Java中按字符对字符串列表进行排序

在字符串列表中搜索某些字符串的更有效方法?

如何在Linq中按与数组匹配的单词数对字符串列表进行排序

使用 C# 4.8:从字符串数组或字符串列表中删除匹配字符串模式的项目的最有效方法

按Java中最常见字符的顺序对字符串列表进行排序

使用存储在另一个列表中的自定义顺序对字符串列表进行排序

有没有一种方法可以按字符串中的数字对字符串列表进行排序?

按字典顺序对字符串列表进行排序而不考虑大小写 - Haskell

按匈牙利字母顺序对匈牙利字符串列表进行排序

有效地测试一个项目是否在一个排序的字符串列表中

按字母顺序对字符串列的每个值进行排序

按字典顺序排序的字符串列表

如何以自定义顺序对给定的字符串列表进行排序?

按整数列表对字符串列表进行排序

按字符对字符串列表进行排序

使用Python在字符串列表中存在某些元素时获取列表索引的有效方法

在Java中对元组列表进行排序的有效方法

在Ruby中对数字和字符串进行排序的有效方法?

如何对具有不同顺序的字符串列表进行排序?

有效地按顺序排序列表

按长度对字符串列表进行排序

按多个参数对字符串列表进行排序

按降序对字符串列表进行自然排序

Dart:按频率对字符串列表进行排序

按索引对字符串列表进行排序