Recent Changes - Search:

Oktatás

* Programozás 2
  + feladatsor
  + C feladatsor
  + Python feladatsor
  + GitHub oldal

* Szkriptnyelvek
  + feladatsor
  + quick link

* levelezősök
  + Adator. prog.
  + feladatsor
  + quick link

teaching assets


Félévek

* 2024/25/1
* archívum


Linkek

* kalendárium
   - munkaszüneti napok '20
* tételsorok
* jegyzetek
* szakdolgozat / PhD
* ösztöndíjak
* certificates
* C lang.
* C++
* C#
* Clojure
* D lang.
* Java
* Nim
* Scala


[ edit | logout ]
[ sandbox | passwd ]

listák szeletelése (slicing)

Hasonlóképpen működik a sztringeknél látott substring metódushoz.

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".

Cloud City

  

Blogjaim, hobbi projektjeim

* The Ubuntu Incident
* Python Adventures
* @GitHub
* heroku
* extra
* haladó Python
* YouTube listák


Debrecen | la France


[ edit ]

Edit - History - Print *** Report - Recent Changes - Search
Page last modified on 2016 October 09, 19:06