【问题标题】:How to add keys to hashtable from a List in the same order in C#如何在 C# 中以相同的顺序从列表中向哈希表添加键
【发布时间】:2018-05-17 05:10:30
【问题描述】:

我有一个整数列表List<int> iFaciltyReqId = new List<int>();,它的元素是

我需要像上面的列表一样订购下面的哈希表(如果元素不存在则需要排除)

我的哈希表是

结果应该是按顺序排列的键 1153 1168 1155 1152 1176 第676章

我尝试如下,但结果不符合我的期望

foreach (var c in iFaciltyReqId)
            {

                foreach (var d in ohmItemSeqs.Keys)
                {
                    if (Convert.ToInt32(c) == Convert.ToInt32(d))
                    {
                        sortedohmItemSeqs.Add(c, ohmItemSeqs.Values);
                    }
                }
            }

结果是 任何帮助将不胜感激。

【问题讨论】:

  • 如果您将minimal reproducible example 作为文本 提供给您,这将更容易为您提供帮助,所有内容都在一个片段中,而不是几个屏幕截图和代码的sn-ps .

标签: c# list hashtable


【解决方案1】:

我建议您简单地获取列表并返回哈希表中的所有内容,如下所示:

var result = yourList.Where(i => yourHashTable.Contains(i)); // works for both HashSet<int> and Hashtable

【讨论】:

  • 同样,yourList.Intersect(yourHashTable) 也可以使用,而且我发现它稍微更具可读性,因为不需要Contains
  • @Flater:它有效。但它更慢(它在内部创建一个新的Set),您需要了解Intersect 的含义,我个人认为这比“其中...包含”更难。 ;)
  • @dnickless... 尝试时会给出错误消息,
  • @Sarat:我明白了......您使用的是“真实”哈希表而不是 HashSet。我已经更新了上面的语法以适用于两者。
  • @dnickless...谢谢...它确实有效...如何将其转换为相同顺序的哈希表,请您帮忙
【解决方案2】:

Hashtable 本质上是一种无序的数据结构,因此如果保持顺序很重要,您需要考虑替代方案。

如果您希望通过插入来确定顺序,OrderedDictionary 可能是一个合适的选择,尽管这取决于您对该对象的其他需求。

【讨论】:

  • 我需要使用哈希表,因为它有一些更重载的方法,使用相同的哈希表作为参数...有什么方法可以使用顺序应该基于插入
  • @Sarat:不,哈希表中的顺序从根本上无法保证。我不清楚您所说的“因为它有一些使用相同哈希表作为参数的更多重载方法”是什么意思。请注意,现在几乎总是应该避免使用 Hashtable 以及其他非泛型集合。
  • @DaisyShipton...你是对的。现在我正在尝试使用字典而不是哈希表。但是当我使用 for each 阅读字典时,它会在第一次迭代后中断。你能建议一下吗?我在这里切碎一个示例代码 int z = 0; foreach (int iSeq in dictionary.Keys) { dictionary[iSeq] = z++; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2011-11-16
  • 2016-06-30
相关资源
最近更新 更多