Autor | Zpráva | ||
---|---|---|---|
007 Profil * |
#1 · Zasláno: 14. 6. 2010, 16:38:56
Dobrý den, mám dvě pole s čísly a potřeboval bych je sestupně seřadit ([0]=největší,...) do jednoho pole a zachovat informaci, ve kterém poli číslo bylo původně. Obě pole mohou obsahovat stejná i odlišná čísla.
Máte s řazením zkušenosti? Děkuji |
||
Timy Profil |
#2 · Zasláno: 14. 6. 2010, 18:02:50 · Upravil/a: Timy
Otázkou je, jak reprezentovat, že daný prvek je z kterého pole. Buď to může být uděláno úplně externě v jiném poli a nebo jako dvojice [prvek, ID_pole]. Zvolím druhý způsob. Mějme tedy dvě pole pole1 a pole2.
var pole1ID = pole1.Select(a => new int[] {a, 0}).ToArray(); var pole2ID = pole2.Select(a => new int[] {a, 1}).ToArray(); var result = pole1ID.Union(pole2ID).OrderByDescending(x => x[0]).ToArray()); Je to jen nástřel, nemám to teď jak zkusit. Idea je taková, že na prvních dvou řádcích si vytvořím modifikované pole, které obsahuje původní prvky a číselný identifikátor pole. Pak si tato dvě pole sloučím přes Union a seřadím nově vzniklé pole přes první prvek. |
||
007 Profil * |
#3 · Zasláno: 14. 6. 2010, 18:34:10
Vůbec nechápu, oč jde. Kompilátor hlásí chyby:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\Documents and Settings\007\Local Settings\Data aplikací\Temporary Projects\ConsoleApplication1\Program.cs 34 86 ConsoleApplication1 Error 2 Invalid expression term ')' C:\Documents and Settings\007\Local Settings\Data aplikací\Temporary Projects\ConsoleApplication1\Program.cs 34 87 ConsoleApplication1 Error 3 ; expected C:\Documents and Settings\007\Local Settings\Data aplikací\Temporary Projects\ConsoleApplication1\Program.cs 34 87 ConsoleApplication1 na třetím řádku Vašeho kódu. |
||
Timy Profil |
#4 · Zasláno: 14. 6. 2010, 18:36:21
007:
var result = pole1ID.Union(pole2ID).OrderByDescending(x => x[0]).ToArray(); Na konci byla jedna závorka navíc. |
||
007 Profil * |
#5 · Zasláno: 14. 6. 2010, 18:58:24
Omlouvám se, nechtěl jsem ten kód příliš zkoumat. Děkuji.
Vaše řešení funguje dokonale. |
||
007 Profil * |
#6 · Zasláno: 14. 6. 2010, 19:59:20
Pane Timy, dovolíte mi ještě otázku, prosím?
Mám velké omezení paměti a potřebuji vymazat ty "dočasné" proměnné, které jsou použity na konstrukci výsledku. Jak mám toto provést? Děkuji Vám |
||
Timy Profil |
#7 · Zasláno: 14. 6. 2010, 21:42:52
007:
var result = pole1.Select(a => new int[] {a, 0}).Union(pole2.Select(a => new int[] {a, 1})).OrderByDescending(x => x[0]).ToArray()); Nic kratšího s touhle logikou už napsat nejde. |
||
Časová prodleva: 14 let
|
0