对数组进行排序,让空位为最后

时间:2017-08-22 00:25:44

标签: c#

我正在尝试在删除索引点的信息后对数组进行排序。 例如: 用户删除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;
    }

但它不会在列表中首先添加“”。 请指教!

3 个答案:

答案 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的选项。