gpt4 book ai didi

c#集合类型,保持索引顺序

转载 作者:行者123 更新时间:2023-11-30 16:57:34 25 4
gpt4 key购买 nike

我有一个包含行的文件 键值

-----+---------------------------
1 1 2 0.39785 0.39785 0.2043 36
1 1 3 0.409604 0.409604 0.180792 24
1 1 4 0.407281 0.407281 0.185438 24
1 1 5 0.404958 0.404958 0.190084 24
1 1 6 0.403399 0.403399 0.193203 24
...
23 34 36 0.414457 0.354921 0.230622 576
..

-前3个数字是key,代表一场比赛,是唯一的,而且是升序的
- 浮点值链接到键。例如:第一行的第 4 个元素(0.39785)属于键 1,第 6 个元素(0.2043)属于 2。

我逐行阅读并用“”(空格)分隔。我应该如何存储它(哪个集合/结构)。

假设我想查找“2 1 1”。正如我写的那样,键是升序的,不会有像“2 1 1”这样的条目,只有“1 1 2”,所以首先我必须对它进行排序,但我想获得值按照查找顺序 (0.2043 0.39785 0.39785)。

最佳答案

下面的数据结构应该满足您的所有要求:

Dictionary<HashSet<int>, Dictionary<int, double>>

使用 LINQ 从您的原始数据创建上述结构的实例应该很容易。

访问应该很容易:

  1. 从 2, 1, 1 创建一个 HashSet (2, 1)
  2. Dictionary 中查找 (2, 1) -> ((1, 0.39785), (2, 0.2043))
  3. 使用部分键查找 double,例如 2 -> 0.2043

CAVEAT 只有当同一行上的 int 值与 double 值相同时,该解决方案才会有效。 (这似乎适用于所提供的样本数据)。

编辑 创建yourLookup的代码:

List<List<int>> intList = new List<List<int>>() {
new List<int> () {1, 1, 2},
new List<int> () {1, 1, 3},
...
};

List<List<double>> doubleList = new List<List<double>> {
new List<double>() {0.39785, 0.39785, 0.2043},
new List<double>() {0.409604, 0.409604, 0.180792},
....
};

var dictionaries = intList.Zip(doubleList, (Is, Ds) =>
{ return Is.Zip(Ds, (i, d) => new KeyValuePair<int, double>(i, d)).Distinct()
.ToDictionary(kv => kv.Key, kv => kv.Value); });

var yourLookup = dictionaries.Select(
dictionary => new { hashset = new HashSet<int>(dictionary.Keys), dictionary })
.ToDictionary(x => x.hashset, x => x.dictionary);

关于c#集合类型,保持索引顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com