【发布时间】:2014-11-20 03:57:11
【问题描述】:
我有一个这样的列表:
public List<Dictionary<int, int>> blanks { get; set; }
这会保留一些索引值:
此外,我还有一个名为 X 的变量。X 可以取任何值。我想找到与 X 最接近且更小的“键”值。我只能通过此代码块获取最接近的值。但是,它不能再小一点。
var diffs = kaynaklarArray[l].blanks.SelectMany((item, index) => item.Select(entry => new { Index = index, Key = entry.Key, Diff = Math.Abs(entry.Key - X) })).OrderBy(item => item.Diff);
var closestDiff = diffs.First();
var key = closestDiff.Key;
var value = (kaynaklarArray[l].blanks[closestDiff.Index])[closestDiff.Key];
如果 X 是 1000,我想取空白 index:1 和 Key:750,因为它比 X 小。但是这个代码块需要 index:2 和 Key:1200。我不想要它。
我该怎么做?
此外,我还有一个这样的列表:
List<List<int[]>> lastList = new List<List<int[]>>();
这一次,我想取第一个 List 的索引和第二个 List 的索引。例如,如果 X 是 800,我想取 0 和 0(对于索引 0),也取 1 和 1(对于索引 1)。
同样,我有这方面的代码块。但它不能取较小的。它需要最近的一个。
var diffSecond = lastList.SelectMany((listS, listIndex) => listS.
SelectMany((array, arrayIndex) => array.Select((item, itemIndex) => new
{
ListIndex = listIndex,
ArrayIndex = arrayIndex,
ItemIndex = itemIndex,
Diff = Math.Abs(item - X)
})));
var closestDiffS = diffSecond.Aggregate((agg, item) => (item.Diff < agg.Diff) ? item : agg);
【问题讨论】:
-
在某处添加 Where(item
-
@Xaruth 因为那个问题的 cmets 太泛滥了,所以我创建了一个新问题。
-
@Dennis_E 是对的。您的代码正在执行您想要的操作。您需要使用某种位置来限制它。在选择之前或之后......但肯定在 First() 之前
-
我应该放在哪里?
标签: c# linq dictionary indexing