Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
Java /
listák szeletelése (slicing)Hasonlóképpen működik a sztringeknél látott List<Integer> li = new ArrayList<>(); li.add(2); li.add(3); li.add(5); li.add(7); li.add(9); li.add(12); System.out.println(li); // [2, 3, 5, 7, 9, 12] List<Integer> uj; uj = li.subList(0, 3); // az első 3 elem, python: li[:3] System.out.println(uj); // [2, 3, 5] uj = li.subList(2, li.size()); // a 2-es indexű elemtől minden System.out.println(uj); // [5, 7, 9, 12], python: li[2:] uj = li.subList(li.size()-2, li.size()); // az utolsó 2 elem, python: li[-2:] System.out.println(uj); // [9, 12] // Vigyázat azonban! // a subList NEM egy másolatot ad vissza, hanem egy nézetet // vagyis a nézet az eredeti lista egy szeletére mutat // Példa: System.out.println(li); // [2, 3, 5, 7, 9, 12] System.out.println(uj); // [9, 12] , a fenti kód alapján uj.set(1, 1000); System.out.println(uj); // [9, 1000] System.out.println(li); // [2, 3, 5, 7, 9, 1000] // Ha az uj értékét módosítjuk, akkor li is módosul! Ha azt akarjuk, hogy a szelet egy független másolat legyen, ne pedig egy nézet, akkor így járjunk el: List<Integer> li = new ArrayList<>(); li.add(2); li.add(3); li.add(5); li.add(7); li.add(9); li.add(12); // A szeletről most egy független másolatot szeretnénk: List<Integer> uj = new ArrayList<>(li.subList(li.size()-2, li.size())); System.out.println(li); // [2, 3, 5, 7, 9, 12] System.out.println(uj); // [9, 12] uj.set(1, 1000); System.out.println(uj); // [9, 1000] System.out.println(li); // [2, 3, 5, 7, 9, 12] Megjegyzés: a Python nyelv esetén a szeletelés mindig egy új objektummal tér vissza, soha nem egy nézettel. Java esetén a nézet az alapértelmezés, és a másolatot nekünk kell "kérni". |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |