c# - 重新排序将空值放在 C# 末尾的数组

标签 c# arrays

我正在尝试制作一个 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(); 的帖子,但是这会删除所有 nulls,当我想保持数组大小不变时。

如何保留我的数组大小,同时将所有空值移到末尾,将所有非空值移到前面(保持值顺序不变)

最佳答案

字面意思是“首先是非空项,然后是空项”:

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/

相关文章:

javascript - 合并/展平多维数组并删除重复的Javascript

c# - 如何在 C# 中使用线程制作重复按钮?

c# - 在 FlowLayoutPanel 内部使用时控件重叠

Javascript 2D 数组未按预期返回结果

javascript - 使用普通的 javascript/jquery 在数组中创建对象

javascript - 无法在 Angularjs 中将 JSON 转换为数组

c# - 第二次尝试时 TcpClient 无法读取

c# - 简单的 Add 方法产生过多的 IL 代码

c# - 在包含抽象方法的抽象类中重构具体方法

c - "Random Walk"程序提前终止