Autor Zpráva
007
Profil *
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
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 *
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
007:
var result = pole1ID.Union(pole2ID).OrderByDescending(x => x[0]).ToArray();


Na konci byla jedna závorka navíc.
007
Profil *
Omlouvám se, nechtěl jsem ten kód příliš zkoumat. Děkuji.
Vaše řešení funguje dokonale.
007
Profil *
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
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.

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0