我想只对数组中的奇数元素进行排序,而不对偶数元素进行排序。
我使用LINQ查询创建了下面的代码,但在这一行得到一个错误:
.Select(x => x.value % 2 == 1 ? x.value : dictionary[x.index])
该错误是由于字典中没有键为“2”的项。即,当if语句的准则为假时,正在评估if语句中的字典[x.index]项(即,当x.值为偶数时)。
public class Kata
{
public static int[] SortArray(int[] array)
{
var dictionary = array
.Select((value, index) => new { value, index })
.Where(x => x.value % 2 == 1)
.OrderBy(x => x.value)
.ToDictionary(x => x.index, x => x.value);
var output = array
.Select((value, index) => new { value, index })
.Select(x => x.value % 2 == 1 ? x.value : dictionary[x.index])
.ToArray();
return new int[1];
}
}
public class Program
{
static void Main(string[] args)
{
Console.WriteLine(Kata.SortArray(new int[] { 5, 3, 2, 8, 1, 4 }));
}
}
1条答案
按热度按时间omqzjyyz1#
您可以提取奇数项,对它们进行排序,最后将它们放回:
Fiddle
请注意,检查奇数应该是
item % 2 != 0
,而不是item % 2 == 1
,因为余数%
在负item
上返回-1
。