我正在尝试制作一个 LRU,并跟踪值顺序。
假设我有数组 items = "P1", "P3", null, null
- 出现 P4 (items =
"P1", "P3", "P4", null
) - P4 尚不存在,因此我将其添加到最低的
null
索引中。 - 但随后 P1 又来了,所以 P1 的位置变为
null
(items =null, "P3", "P4", null
) - 然后我需要一种方法(我的问题)像这样移动所有内容(items =
"P3", "P4", null, null
) - 然后在最低的
null
索引处添加 P1 (items ="P3", "P4", "P1", null
) - 以此类推,跟踪LRU
所以我需要找到一种方法将所有非空值移动到数组的前面(按顺序)。
我确实找到了一个使用此 items = items.Where(s => !String.IsNullOrEmpty(s)).ToArray();
的帖子,但是这会删除所有 null
s,当我想保持数组大小不变时。
如何保留我的数组大小,同时将所有空值移到末尾,将所有非空值移到前面(保持值顺序不变)
最佳答案
字面意思是“首先是非空项,然后是空项”:
var nulls = items.Where(x => x == null);
var nonnulls = items.Where(x => x != null);
var result = nonnulls.Concat(nulls);
或者:
var result = items.OrderBy(x => x == null).ThenBy(x => x.SomeOtherKey);
关于c# - 重新排序将空值放在 C# 末尾的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875041/