[1,5,3,7,2,10,15,9]
出力
[1,15,2,10,3,9,5,7]
ロジックは
[1st smallest value, 1st highest value, 2nd smallest value, 2nd highest value, ...]
がどのようにC#でこれを実装するのですか?
[1,5,3,7,2,10,15,9]
出力
[1,15,2,10,3,9,5,7]
ロジックは
[1st smallest value, 1st highest value, 2nd smallest value, 2nd highest value, ...]
がどのようにC#でこれを実装するのですか?
別の解決策:
public static IEnumerable<T> SmallestGreatestSequence<T>(
this IEnumerable<T> source)
{
var ordered = source.OrderBy(i => i).ToList();
var ascendingIndex = 0;
var descendingIndex = ordered.Count - 1;
while (ascendingIndex < descendingIndex)
{
yield return ordered[ascendingIndex++];
yield return ordered[descendingIndex--];
}
if (ascendingIndex == descendingIndex)
yield return ordered[ascendingIndex];
}
そして、あなたはこのようにそれを使用したい:あなたがこれまで持っている何
var someArray = new[] { 1, 5, 3, 7, 2, 10, 15, 9 };
var sortedArray = someArray.SmallestGreatestSequence().ToArray();
私は、これはSQLやMySQL関連のある方法を見て、しかし、最初のタグをC#であるとして、ここではそのためのソリューションですしないでください。
var inputSorted = input.OrderBy(i => i).ToArray();
var output = new List<int>();
//go with index to the half of the array
for (int i = 0; i < inputSorted.Length/2; i++)
{
//add the i-th lowest number
output.Add(inputSorted[i]);
//add the i-th highest number
output.Add(inputSorted[inputSorted.Length - i - 1]);
}
//if the length of the array is odd, add the single left out number
if (inputSorted.Length % 2 == 1)
{
output.Add(inputSorted[inputSorted.Length/2]);
}
名前 'input'は現在のコードで終了しません。 このエラーをどのようにしてこのプログラムを削除しますか?初心者ですので気にしないでください。 –
あなたはLINQベースのソリューションに満足している場合、下記のオプションかもしれない。
var input = new int[] { 1, 5, 3, 7, 2, 10, 15, 9, 6 };
var sorted = input
.OrderBy(z => z)
.ToList();
var zippedInOrder = sorted.Take(input.Length/2)
.Zip(
Enumerable.Reverse(sorted).Take(input.Length/2),
(a, b) => new int[] { a, b });
var inOrder = zippedInOrder.SelectMany(z => z);
if (input.Length % 2 == 1)
{
// Add the 'middle' element (sort order wise)
inOrder = inOrder.Concat(new List<int> { sorted[input.Length/2] });
}
var finalInOrder = inOrder.ToList();
// To test
Console.WriteLine(string.Join(",", finalInOrder));
コードが入力データをソートし、次いで低い数値をとり、Zip
は多数でそれらをです。次にSelectMany
を使用してデータを単一のIEnumerable
に投影します。 Concat
は、残りの中間アイテムを追加するために使用されます(Length
が奇数だった場合)。
?あなたはどこにいらっしゃいますか? – Zephire