Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vyhledání slova v poli

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:22.10.2012 8:52

Zdravím, dá se nějak zjistit jestli se v nějakém poli nachází určité slovo ? např.

string[] mojepole = new string[10];
string mujtext = "devbook";
if(mujtext je v mojepole)
{
MessageBox.Show("Je tam !!!!!!!");
}
else
{
MessageBox.Show("Neni......");
}
Odpovědět
22.10.2012 8:52
Neaktivní uživatelský účet
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:22.10.2012 9:00

Buďto to projet cyklem a nebo použít LINQ. Něco jako

int[] i = new int { 1, 5, 8, 7 };
i.Any(item => item > 5);

string[] s = new string { "ahoj", "cau" };
s.Any(item => item == "ahoj");

Zkus a dej vědět. Je to jen momentální nápad, nezkoušel jsem.

Nahoru Odpovědět
22.10.2012 9:00
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:22.10.2012 9:03

Použij list... :) (Můžeš pomocí Linq - ale to mi přijde zbytečné - jakmile něco takového chceš, tak to stejně asi hodláš používat jako list...)

 
Nahoru Odpovědět
22.10.2012 9:03
Avatar
Odpovídá na David Jančík
Neaktivní uživatel:22.10.2012 9:04

Co znamená to item => item == "ahoj" ??
Dobrá, prozradím svůj nápad - něco zkouším a chci přiřadit každé klávese zvuk (ťuknutí) a chci rozlišit písmena a čísla od funkcí (caps lock, shift, control atp.) tak mě napadlo že si to dám do pole..
Pokud to bude v 1. poli ozve se ťuknutí,když to bude v 2. třeba zabzučení :D

Editováno 22.10.2012 9:05
Nahoru Odpovědět
22.10.2012 9:04
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:22.10.2012 9:11

Použij Dictionary.

Nahoru Odpovědět
22.10.2012 9:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:22.10.2012 9:12

OK jdu googlit :D

Nahoru Odpovědět
22.10.2012 9:12
Neaktivní uživatelský účet
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:22.10.2012 9:18

Tak na tohle se Pole nehodí. Jak říkal Kit použij slovník. Do něj si uložíš klávesu a k ní přiřazený zvuk.
Dictionary<Keys,string> kde Keys bude klávesa a string cesta k souboru s hudbou.
Pak si dáš

if (x.ContainsKey(Keys.Escape))
   PlaySound(x[Keys.Escape]);
Nahoru Odpovědět
22.10.2012 9:18
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Odpovídá na David Jančík
Neaktivní uživatel:22.10.2012 9:25

Takže to bude nějak.....

Dictionary<Keys,string> seznamKlaves = new Dictionary<Keys,string>();
seznamKlaves.Add("a",Program.Properties.Resources.zvuk);
seznamKlaves.Add("b",Program.Properties.Resources.zvuk);
seznamKlaves.Add("c",Program.Properties.Resources.zvuk);
seznamKlaves.Add("d",Program.Properties.Resources.zvuk);
seznamKlaves.Add("e",Program.Properties.Resources.zvuk);
seznamKlaves.Add("escape",Program.Properties.Resources.zvuk2);
..........

??

Nahoru Odpovědět
22.10.2012 9:25
Neaktivní uživatelský účet
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:22.10.2012 9:29

Tak já ti to napíšu a ty uděláš tohle?
Když dáváš jako klíč dat. typ Keys tak tam asi nebudeš dávat string to samý se zvukem. Božee.

seznamKlaves.Add(Keys.Escape, "C:\\Hudba\\Můj zvuk.wav");

A příště si to zkoušej. Tohle by ti VS omlátil vo hlavu.

Nahoru Odpovědět
22.10.2012 9:29
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:22.10.2012 9:31

První položka je klíč (druhá je jeho hodnota) - klíč používáš jako index - k tomu je slovník... (Dále můžeš odděleně vyhledávat jak v klíčích, tak v hodnotách)...

slovník[klíč] > hodnota

slovník.ContainsKey(klíč) ?
Editováno 22.10.2012 9:32
 
Nahoru Odpovědět
22.10.2012 9:31
Avatar
Odpovídá na David Jančík
Neaktivní uživatel:22.10.2012 9:36

A co když mám ten zvuk v Resources ?

Nahoru Odpovědět
22.10.2012 9:36
Neaktivní uživatelský účet
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:22.10.2012 9:40

Tak je přeci jedno kde ho máš - prostě klíč bude klávesa, a hodnota zvuk. Osobně si myslím, že lepší to bude v složce sounds - i třeba nějak komprimované...

Také bych se vyhnul podmínkám a jiným větvením - prostě dej vstup jako index do slovníku a to do try bloku... (A to pak i využiješ pro jiné potřeby.)

Editováno 22.10.2012 9:42
 
Nahoru Odpovědět
22.10.2012 9:40
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:22.10.2012 9:41

Si tam ulož cestu do resources. Ale docela blbě se s tím pracuje. Bude lepší, když si uděláš složku zvuky u programu a tam je budeš mít. Nebo tu zas budeš zmatkovat, že ti to nejde.
Ale pokud chceš nuceně použít ty Resources tak tam dáš tu cestu co tam máš nebo se to ještě dělá nějak přes Assembly GetResource.
To musíš vyzkoušet. Takto jsem s tím zatím nikdy nepracoval.

Nahoru Odpovědět
22.10.2012 9:41
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:22.10.2012 9:49

Výjimky budou v tomto případě o něco rychlejší.

try {
   PlaySound(x[key]);
} catch (KeyNotFoundException) {
   PlaySound(defaultSound);
}

Pokud však ve slovníku budou pouze znaky, možná by se místo něho víc hodil Regex.

Nahoru Odpovědět
22.10.2012 9:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:22.10.2012 9:51

Už jsem mu vyjímky navrhl... A zrovna jsem si to pořádně pročetl - a minimálně ten regex bych tu také uvítal...

 
Nahoru Odpovědět
22.10.2012 9:51
Avatar
Odpovídá na Kit
Neaktivní uživatel:22.10.2012 10:00

Nakonec jsem zjistil že budu potřebovat jen 3 klávesy - Caps,Shift a Control... takže jsem to vyřešil IFem

Teď další problémek :D
Mám Font dialog, v events je jen Apply,takže když kliknu na OK tak se písmo nezmění, musím napřed na Použít, pak na OK a to už se změní... Dá se udělat aby se změnilo po kliknutí na OK ?

Editováno 22.10.2012 10:01
Nahoru Odpovědět
22.10.2012 10:00
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:22.10.2012 10:02

Když jsem napsal ten Regex, tak jsem si uvědomil, že klávesa není znak. Je tedy otázkou, zda Regex použít. Pokud by se do toho montovaly funkční klávesy, tak určitě ne.

Nahoru Odpovědět
22.10.2012 10:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:22.10.2012 10:05

e.KeyData.ToS­tring()

Funkční: "F.", zbytek vypsat...

 
Nahoru Odpovědět
22.10.2012 10:05
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:22.10.2012 10:12
if (fontDialog1.ShowDialog() == DialogResult.OK)
xxx.Font = fontDialog1.Font;
 
Nahoru Odpovědět
22.10.2012 10:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.