我正在尝试在删除索引点的信息后对数组进行排序。 例如: 用户删除5个项目的数组的索引1,并用“”替换索引1中的信息。
现在我希望索引对索引进行排序,以便索引1(以“”作为数据)到达最后一部分。 为此,我使用Array.Sort(),但据我所知,并注意到它会将“”索引放在数组中,但我希望该部分最后。 为了尝试解决这个问题,我尝试了以下代码:
static string[] Sort(string[] array, ref int counter)
{
Array.Sort(array);
for (int i = 0; i < array.Length; i++)
{
if (array[i] == "")
{
if (i + 1 < array.Length)
{
string temporary = array[i];
array[i] = array[i + 1];
array[i + 1] = temporary;
}
}
}
return array;
}
但它不会在列表中首先添加“”。 请指教!
答案 0 :(得分:2)
就地排序的另一个选择是使用自定义Comparer
:
string[] array = { "2", "", "1" };
Array.Sort(array, (a, b) => a == "" ? 1 : b == "" ? -1 : a.CompareTo(b)); // "1", "2", ""
答案 1 :(得分:0)
试试这个:
var sorted = stringArray.OrderBy(x => x.Length ==0).ThenBy(x=>x);
答案 2 :(得分:0)
如果你坚持使用你的方法,这样的事情会起作用:
static string[] Sort(string[] array, ref int counter)
{
Array.Sort(array);
int lowestFilled = -1;
for (int i = 0; i < array.Length; i++)
{
if (array[i] != "")
{
if (i - lowestFilled > 1)
{
string tmp = array[lowestFilled + 1];
array[lowestFilled + 1] = array[i];
array[i] = tmp;
++lowestFilled;
}
}
if (array[i] != "")
{
lowestFilled = i;
}
}
return array;
}
但我建议选择ainwood的选项。