我有int
小號獲取排列的指標,並刪除一切留下了指數
int[] RowOfints = 1,2,3,4,5,6,7,8,9;
一個數組,如果我輸入例如值4
我想從數組中刪除1,2,3
並返回還剩下些什麼的。 如何做到這一點?
我有int
小號獲取排列的指標,並刪除一切留下了指數
int[] RowOfints = 1,2,3,4,5,6,7,8,9;
一個數組,如果我輸入例如值4
我想從數組中刪除1,2,3
並返回還剩下些什麼的。 如何做到這一點?
我解釋,你要查找的索引值4
,然後採取一切您的問題從該指數位置開始。
var result = RowOfInts.SkipWhile(item => item != 4); // optionally, .ToArray()
result
將是一個IEnumerable<int>
包括4 .. 9
。如果你想要一個具體的數組,你也可以使用可選的ToArray()
擴展方法。如果數組中沒有元素符合給定條件,您將得到一個零長度序列。
@Anthony Pegram這會做。還有1個問題,我可以選擇數字 例如,該數組只能顯示4到7之間的數值 – Michael27 2011-04-15 21:27:51
@Michael,這聽起來像是一個Where過濾器。 'RowOfInts.Where(item => item> = 4 && item <= 7);'這將返回符合條件的任何東西,而不管它在原始序列中的位置。您還可以鏈接這些方法,以多種方式過濾,分組,排序和/或投影您的數據。根據你的問題措辭,你可以看到有很多關於你真正想要的東西的解釋! – 2011-04-15 21:35:16
@安東尼這不會刪除任何權利,先生? – Bastardo 2011-04-15 21:39:23
using System.Linq; ....
int[] RowOfints = {1,2,3,4,5,6,7,8,9};
int[] Answer = RowOfints.Where(x => x != 1 && x != 2 && x != 3).ToArray()
如果數組中有1,000個項目,請求的索引是998? – 2011-04-15 21:22:41
我不是downvoter,但OP指定「4」也是輸入的一部分,它應該以某種方式或其他方式使用。你應該嘗試在某個地方擠壓它。 – 2011-04-15 21:24:52
Ups,我的壞。我誤解了這個問題。 – 2011-04-16 00:10:22
如果你不想使用LINQ:
int[] newRowOfInts = new int[RowOfInts.Length - index];
Array.Copy(RowOfInts, index, newRowOfInts, 0, newRowOfInts.Length);
好了,現在我明白這個問題好,我會後我的版本的實際需求(又倔強強調效益分析了可讀性):
private static int[] RemoveBeforeValue(int[] source, int value)
{
if (source == null)
return null;
int valueIndex = 0;
while (valueIndex < source.Length && source[valueIndex] != value)
valueIndex++;
if (valueIndex == 0)
return source;
int[] result = new int[source.Length - valueIndex];
Array.Copy(source, valueIndex, result, 0, result.Length);
return result;
}
OLD ANSWER
如果你想(但是高效!)的方式,那麼你可以這樣做(假設你想刪除小於提供值的值):
private static int[] RemoveValuesLessThan(int[] source, int newMinimum)
{
if (source == null)
return null;
int lessThanCount = 0;
for (int index = 0; index < source.Length; index++)
if (source[index] < newMinimum)
lessThanCount++;
if (lessThanCount == 0)
return source;
int[] result = new int[source.Length - lessThanCount];
int targetIndex = 0;
for (int index = 0; index < source.Length; index++)
if (source[index] >= newMinimum)
result[targetIndex++] = source[index];
return result;
}
這就是很多代碼,它代表了'source.Where(item => item> = newMinimum).ToArray()',是不是? – 2011-04-15 21:13:18
@Anthony Pegram - 它有很多源代碼,但它的行爲*比你的版本低很多。是的,你的情況可能會更好,但我喜歡微觀優化所有東西以致死亡。 – 2011-04-15 21:17:20
@Anthony Pegram - 很有趣,沒有人發佈過你的LINQ版本作爲答案。我真的認爲我對這個問題的解釋是最可能的,而你的代碼是答案最明顯的實現。 – 2011-04-15 21:20:37
對於整數
public static void RemoveIntsBefore(int i)
{
int[] RowOfints = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int k = 0; k < RowOfints.Length; k++)
{
if (RowOfints.ElementAt(k) < i)
{
RowOfints[k] = i;
}
}
RowOfints = RowOfints.Distinct().ToArray();
//this part is to write it on console
//foreach (var item in RowOfints)
//{
// Console.WriteLine(item);
//}
//Console.ReadLine();
}
與這一個的順序排列你的陣列不必是連續
public static void RemoveIntsBefore(int i)
{
int[] RowOfints = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1,2 };
Console.WriteLine("OUTPUT");
foreach (var item in Enumerable.Range(i-1, RowOfints.Length + 1 - i).ToArray())
{
Console.WriteLine(RowOfints[item]);
}
Console.ReadLine();
}
你的答案是「沒有使用任何臨時數組或LINQ」,但你的代碼包括'Distinct()。ToArray()',兩者都確實是LINQ的一部分! – 2011-04-15 21:37:25
@Anthony:D是的,我將刪除這句話 – Bastardo 2011-04-15 21:40:20
你輸入4的結果是'4 4 4 4 5 6 7 8 9'。這是你對原始問題尋求的解釋嗎? – 2011-04-15 21:42:12
你爲什麼,因爲價值4去除1,2,3?這是他們的價值還是他們的位置? – 2011-04-15 21:04:55
@Jeffrey我不認爲當他有一個順序陣列時,它真的會有所不同,先生。 – Bastardo 2011-04-15 21:10:48
@EmreVeriyaz - 確實,但是數組序列是不變的還是隻是一個例子?如果它總是一個順序列表,那麼即使將它存儲在一個數組中,也沒有真正的理由! – 2011-04-15 21:13:48