我正在處理一個項目,並且我發現很難刪除與該項目標識相關的整個行,無需用戶想要刪除。我知道你不能只是從數組中刪除。我想轉移,比如說如果我找到用戶提供的項目ID,我將與該ID相關聯的整行(每個id有幾列)移動到最後一行,然後我的數據中的整個列向上移動一行。我的意思是說這很容易,但我發現很難寫入代碼。刪除從數組提供的項目用戶
回答
這是我認爲你需要完成的代碼。它會從陣列中移出並刪除您的記錄,將所有內容都移到一個位置,並將您的記錄放到數組的末尾。我使用了一些你的代碼。如果堅持所有這一切到你的主要應用程序的應用程序它將工作。這是O(n)時間/ O(n + 1)空間 - 如果您需要證明您選擇的算法:)
struct MyWreck
{
public int Id;
public string Desc;
}
static int itemCount = 10;
static MyWreck[] items = new MyWreck[10];
public static void PrepareArray()
{
var seed = 400;
for (var i = 0; i < itemCount; i++)
{
items[i] = new MyWreck { Id = seed + i, Desc = "Description " + i };
}
}
public static void DeleteFromArray()
{
PrepareArray();
Console.Write("Please enter an item ID No: ");
string id = Console.ReadLine();
int itemidnotodelete = int.Parse(id);
bool iDelete = false;
var removedWreck = new MyWreck();
for (int i = 0; i < itemCount; i++)
{
if (items[i].Id == itemidnotodelete)
{
iDelete = true;
removedWreck = items[i];
}
if (iDelete)
{
if (i < itemCount - 1)
{
items[i] = items[i + 1];
}
else
{
items[i] = removedWreck;
}
}
}
}
}
我thik這是我正在尋找。我有一個問題,爲什麼你聲明var removeWreck? – user124473
因爲您需要在移動陣列的其餘部分時在某處存儲刪除的記錄。一旦所有記錄都移動了,你就把你的「刪除」記錄放在數組的末尾。 另一個解決辦法是讓你的陣列不再由1和存儲您刪除的記錄,但我發現它在處理指標方面理出頭緒。 – agfc
然而,如果你不需要存儲,在年底已刪除的記錄,然後簡單地刪除與「removedWreck」變量做的一切。 – agfc
我知道的最快方法是LINQ例如爲:
int[] numbers = { 1, 3, 4, 9, 2 };
int numToRemove = 4;
numbers = numbers.Where(val => val != numToRemove).ToArray();
如果你有複雜類型的其他數組,你只需要改變。凡聲明。
item[i + 1].itemIDNo = item[i + 1];
我將其更改爲item[i].itemIDNo = item[i + 1];
和包裝它在一個循環中,其遍歷陣列直到你在大小-1。那麼你可以打破。現在oyu應該剛剛覆蓋你要刪除的數據並將所有其他數據向上移一行
我會這樣做,但「item」被初始化爲包含標題s的結構,即itemIDNo,itemID,Type,Placesfound,Uses,我正在使用它來解決此問題。所以我只需要一個不同的方法。 – user124473
我沒有被教過名單,我敢打賭這會更容易。我只是在處理我所教的內容。請參閱我對@AlexeiFimine的評論 – user124473
在代碼中,item被聲明爲一個struct數組。我會欣賞提示。 – user124473
Linq的做法
item = item.Where(x => x.itemIDNo == int.Parse(Console.ReadLine())).ToArray();
ItemCount = item.Length; //or better replace ItemCount with item.Length
這可能不是最好的解決辦法,但你可以在陣列複製到另一個陣列。像這樣的東西。
int[] items = { 1, 3, 4, 9, 2 };
int[] newItems = new int[items.Length-1];
var itemtodelete = 4;
int itemIndex=-1;
int j = 0, k = 0;
for (int i = 0; i < items.Length; i++)
{
if (items[i] == itemtodelete)
{
itemIndex = i;
break;
}
}
while (j < items.Length - 1)
{
if (k != itemIndex)
{
newItems[j++] = items[k];
}
k++;
}
- 1. 從uitableview的數據提供程序中刪除項目
- 2. 從數組中刪除數組項目
- 3. 從通用數組中刪除項目
- 4. 從JavaScript中移除項目從數組中刪除項目
- 5. 從用戶從QComboBox中刪除項目
- 6. PowerShell從數組中刪除項目[0]
- 7. 從數組列表中刪除項目
- 8. 啪從數組刪除項目
- 9. 從數組中刪除項目jQuery
- 10. 從數組中刪除多個項目
- 11. 從Laravel Session數組中刪除項目
- 12. 刪除一個項目從數組
- 13. 從ListPreference中刪除數組項目
- 14. 從陣列中刪除項目數組
- 15. jQuery從數組中刪除項目
- 16. 從動態數組中刪除項目
- 17. C#從類數組中刪除項目
- 18. 從數組中刪除項目?
- 19. PHP從數組中刪除項目
- 20. 刪除數組元素提供
- 21. 從數組刪除對象沒有被完全刪除項目
- 22. 使用RegExp刪除數組項目?
- 23. Xcode - 如何從數組中的數組中刪除項目?
- 24. 從用戶窗體組合框中刪除項目
- 25. 從用戶提供的路徑中刪除前導「../」
- 26. 從項目提供的依賴項(Gradle)
- 27. 刪除PHP數組中項目的.htm
- 28. 刪除數組中的特定項目
- 29. 如何刪除數組中的項目
- 30. 刪除會話數組中的項目
因此,您不希望從您的數據庫中刪除實體?我不明白爲什麼,但無論如何,您還可以在實體上設置一個標誌,標誌它處於活動狀態或非活動狀態,然後僅顯示標誌設置爲活動狀態的標誌。 – HimBromBeere
是否要刪除或不刪除?爲什麼你的變量叫做「itemidnotodelete」?你想達到什麼目的?根據ID取一個項目,將它移動到數組的末尾,並移動數組中的所有內容以關閉「孔」。 ? – agfc
@AlexeiFimine我想要刪除。變量「itemidnotodelete」是用戶輸入的內容。如果找到ID號碼,我試圖刪除整行。例如,在第1行即標題中有一列(itemID,Type,Placesfound,Uses),在第2行的下面有(123,盤子,陶瓷,廚房,吃東西),第3行有(456 ,耳機,電子產品,娛樂)以及第4行,第5行等等。所以我們可以說我想刪除itemID 456?如何將itemID 456的整行移動到數組中的最後一個位置,然後縮小它。這是我的問題。 – user124473