it-swarm-eu.dev

Jak vytvořit pole číselných rozsahů pro pole?

Mám pole v systému zvaném „skóre“, které sahá od neurčeného záporného čísla k neurčenému kladnému číslu. Snažím se zjistit uživatelské rozhraní pro uživatele, aby vytvořil „pásma“ čísel, která mohou být označena. (Příklad: Nízká, střední, vysoká)

Pokrytí pásů musí být úplné (do záporné a kladné nekonečna) a také se musí vzájemně vylučovat (bez překrývání).

Experimentoval jsem s jezdci, ale to je složitý problém. Už to někdo udělal předtím?

3
Glen Lipka

Trochu mě trápí, že lidé žijící ve světě vystavení věcem, jako jsou weby Google Instant a StackExchange, to dokážou možná stále navrhovat jakýkoli „rigidní“ a „podobný“ přístup! : -/Budu parafrázovat @ BobbyJack a Wendy's tím, že řeknu „Kde je hovězí maso?“

Například, proč bych měl třídit čísla na rozdíl od toho, aby počítač nechal udělat to pro mě? Nemohu jen dát seznam rozdělených bodů a nechat je vytvořit rozsahy? Co když moje data pocházejí ze zdroje, který již obsahuje čísla - jak může pomoci automatizované zpracování?

Ale je lepší zapálit svíčku než proklínat temnotu, ne? :) Jsem na dovolené a je to už nějakou dobu, co jsem aktualizoval svůj blog, a Glen navrhuje, že na tom nebylo dřívější umění. Takže jsem si myslel, že budu mít crack na jeho kódování, které si můžete ve skutečnosti vyzkoušet online (samozřejmě „nedokončený“):

http://jquery-numband.hostilefork.com

( Aktualizace: 20. března 2015 Přidal jsem krátké demo video .) = =

screenshot of the program in action

Můžete zadat volný text. Vybere vše, co je číslo, zahodí duplikáty a vygeneruje rozsahy. Chcete-li přidat nové číslo, můžete ho zadat pouze tam (nic vám nebrání v tom, abyste nasadili další tlačítka, ale je to docela hezké upravit seznam rozdělených bodů samostatně).

Šipky umožňují určit inkluzivní/exkluzivní hranice rozsahu. Klikněte na šipku a skočí do sousední skupiny kapel a směr převrácení. (Takže ve výše uvedeném diagramu je "bla" pro něco většího než 20, ale méně než 40 ... zatímco 20 půjde na "Výchozí" a 40 půjde na "další".)

Udělal jsem jednoduchý mechanismus historie, ale člověk si může představit něco mnohem lepšího. V zásadě, pokud jednoduše přidáte nový bod rozdělení a vymaže mapování, které jste zadali ... udržuje tuto starou hodnotu kolem spolu s pamětí rozsahu, s nímž byl spojen. Prozatím automaticky stahuji záznamy historie, pouze pokud se vrací rozsah se stejnými číselnými limity. Bylo by také možné navrhnout návrhy z historie nebo je z ní přetáhnout.

Je to open-source, MIT licencováno) a jeho vylepšování je ponecháno jako cvičení pro čtenáře :)

https://github.com/hostilefork/jquery-numband

Zaprvé, jak dobře se seznámíte se symbolem nekonečna vaši uživatelé? Je to malý bod, a myslím, že bude bude v pořádku, ale stále stojí za kontrolu.

Za druhé, nevidím, jak může jezdec s nekonečnem (pozitivním nebo negativním) na jednom konci fungovat. Váš příklad ukazuje 20 blízko středu; jaká hodnota by byla použita blízko jednoho konce? 1 milion? 1 bilion? 1 googol?

Pokud jsou hodnoty skutečně neomezené, potřebujete k jejich zadání rychlý mechanismus a jakýkoli posuvník nebo tlačítka '+'/'-' nebudou ve velkém počtu vhodná. Volný text se začíná jevit jako jediná možnost a je to určitě nejflexibilnější, ne-li nejatraktivnější.

Můžete uvést příklad skupiny kapel? Opravdu chci získat pocit, zda jsou něco jako:

-INFINTY - -100
-100 - 100
100 - INFINITY

nebo:

-INFINITY - -1,000,000,000,000
-1,000,000,000,000 - -500,000,000,000
...

nebo zda je skutečně možné cokoli.

2
Bobby Jack

100% souhlasím s přístupem HostileFork ke vstupu do stylu textového pole. Když jsem četl otázku, okamžitě mě přimělo přemýšlet o klasickém tiskovém dialogovém rozhraní pro zadávání stránek, které mají být tiskárnou - je to podobný problém a vstup do textového pole je stále tím nejlepším řešením, jaké vidím.

Myslím, že je třeba zvážit i několik dalších věcí:

  • Uživatelé by se mohli chtít rozdělit do ekvidistantních pásem, což by bylo docela bolestivé u uživatelského rozhraní textového pole, protože uživatel je nucen ručně zadat každou hranici kbelíku (velmi bolestivé, pokud jsou pásma malá ve srovnání s rozsahem hodnot dat)
  • Myslím, že je důležité si vizualizovat pásma, aby si uživatel uvědomil, že potenciálně vytvářejí pásma stejné velikosti
  • Myslím, že ruční pojmenování pásem je případ Edge, aplikace to může udělat pomocí standardní konvence pojmenování pásem (s uživatelem, který se rozhodne přejmenovat, pouze pokud si to přeje)

Zde je maketa: enter image description here

  • Při psaní hodnot do textového pole si můžete představit vizualizaci modrého rozsahu, která animuje dílčí oblasti
  • Protože vizualizace rozsahu je v měřítku, je zde problém s vytvářením kbelíků, které jsou příliš malé a neumožňují žádný prostor pro štítky. Štítky by se objevily tam, kde mohou, ale budou zrušeny, pokud nebude místo; uživatel se může pohybovat po blocích a získat tyto informace (a další) pomocí popisku.


Problém smíšených jednotek:
U hierarchických souvislých dimenzí (jako je čas) existuje problém vstupu z různých úrovní hierarchie. Například v případě držby mohou uživatelé chtít specifikovat prvních několik pásem držby v měsících a zbytek v letech; UI textového pole však vyžaduje, aby veškerý vstup byl ve stejné časové jednotce (např. roky). Jednou z možností je použití přístupu v desetinných letech, se vstupním zaokrouhlením na nejbližší měsíc (např. Pokud uživatel zadal 0,27, zaokrouhlí se na 0,25, což se rovná 3 měsícům). To samozřejmě není použitelnost - vidím jen uživatele, kteří tam sedí s kalkulačkou, která se snaží zjistit, co je desetimístný formát v 5 měsících. Dalším přístupem by bylo, kdyby se časové pole přepínalo vedle textového pole (maketa níže). Bez ohledu na to si myslím, že automatické pojmenování kapel by mělo provádět převod jednotek a vyhýbat se desetinným číslům! enter image description here

2
M.A.X

Jedna možnost, se kterou přišel přítel.

alt text

1
Glen Lipka

Myslím, že jste na správné cestě s grafickým znázorněním rozsahů. Moje první myšlenka na testování je něco podobného, ​​přičemž názvy rozsahů jsou jasně mezi hranicemi rozsahu:

[img

Tlačítko plus rozděluje rozsah přidáním výchozího ohraničení (například uprostřed) a výchozího jména, přičemž se zaostření umístí na nový ohraničení pro úpravu. Uživatel může kliknout nebo na záložku, aby změnil název oblasti a v případě potřeby je změnil.

alt text

K odstranění názvu a horní hranice potřebujete dvě odstranění, jednu pro odstranění názvu a horní hranici a pro odstranění názvu a dolní hranice:

[ing

Rozestupy mezi hranicemi mohou být úměrné jejich oddělení. V takovém případě budete pravděpodobně také muset podporovat zvětšování a zmenšování. Můžete také chtít umožnit uživatelům přetáhnout hranici a změnit její hodnotu. Pokud však vaši uživatelé dokážou získat dostatečný smysl pro velikost rozsahu jen z číselných hodnot, pak byste z důvodu jednoduchosti měli chtít sbalit hranice (jako jsem to udělal) dohromady, takže představují pouze jejich pořadové pořadí . V takovém případě můžete chtít nastavit ovládací prvky ohraničení (jako jsem udělal), aby bylo možné zadat jinou hodnotu.

Výše uvedený návrh je docela samokumentující, ačkoliv se pravděpodobně budete muset potýkat s grafickým designem, zejména pro komunikaci o tom, jak se liší dvě tlačítka Odstranit (moje hrubé výkresy pravděpodobně nebudou adekvátní). Návrh je však také relativně prostorově náročný a nepřehledný (i když opět může pomoci lepší grafický design). Pokud je prostor na špičkové úrovni, možná budete chtít obětovat nějakou samodokumentaci a zvážit model výběru objektu-akce, kde každý název rozsahu má ikonu pro podporu výběru a nabídku (rozevírací i kontextovou), která poskytuje možnosti . Rovněž vám umožňuje zahrnout jako možnost kopírování rozsahů na jinou skóre:

[img

To znamená, že podporujete výběr pomocí obvyklých idiomů.

Dokážu si představit dva životaschopné způsoby, jak zacházet s uživatelem, který mění mezní hodnotu tak, že přeskočí další hranici:

  • Zabraňte. Jednoduše to nedovolte. Pokud uživatel zadá skokovou hodnotu, vyvolejte chybovou zprávu. Pokud se uživatel přetáhne nebo otočí na jinou hranici, poskytněte grafickou zpětnou vazbu, že uživatel je na hranici (např. Hranice omezení se změní tučně a červeně). To je nejlepší, pokud skokové žáby bývají chybami (např. Uživatel zadal další číslici). Z toho je snadné se zotavit.

  • Squish. Změňte hranici (nebo hranice) s přeskočením na stejnou hranici s přeskočením. To je nejlepší, pokud skokové žáby mají sklon k úmyslnému - to, že uživatel plánuje upravit nebo smazat ohraničené skoky nebo rozsahy, když jsou dobré a připravené. Je to flexibilní, ale těžší je obnovit, pokud se jedná o chybu, protože mění hodnoty libovolného počtu hranic, zejména pokud nepodporujete Undo (ale budete mít Undo, že?)

1
Michael Zuschlag

Navrhuji označit osu 0, - [velké číslo] a + [velké číslo] ocasem za každou z těch, které budou exponenciálně stoupat

0
Schuyler