List와 Map의 콜라보.
void main() {
List<Map<String, String>> resolution =[
{
'column' : '3840',
'row' : '2160',
},
{'column' : '1920',
'row' : '1080',
}
];
var fourK = resolution[0];
var twoK = resolution[1];
print(fourK.runtimeType);
print(fourK);
print(twoK);
}
결과
JsLinkedHashMap<String, String>
{column: 3840, row: 2160}
{column: 1920, row: 1080}
오래전 쓰던 배열과 구조체와 비슷하지만 쓰는 방법이 달라서 머리에 안들어옴. ㅠㅠ
void main() {
List<Map<String, dynamic>> resolution =[
{
"name" : 'fourK',
"column" : 3840,
"row" : 2160
},
{
"name" : 'twoK',
"column" : 1920,
"row" : 1080
}
];
for(var res in resolution){
print(res["name"]);
}
for(var res=0; res<resolution.length; res++){
print(resolution[res]["name"]);
}
print(resolution.first);
print(resolution.first["name"]);
print(resolution[0]["name"]);
}
결과는
fourK
twoK
fourK
twoK
{name: fourK, column: 3840, row: 2160}
fourK
fourK
나주에 드롭박스로 선택한 이름에 따라 각 변수 세팅하려면 일단 for loop 돌려야 하는데,
void main() {
String modelName;
double modelColumn;
double modelRow;
String modelSelect;
List<Map<String, dynamic>> resolution =[
{
"name" : 'fourK',
"column" : 3840,
"row" : 2160
},
{
"name" : 'twoK',
"column" : 1920,
"row" : 1080
}
];
for(var res in resolution){
print(res["name"]);
}
for(var res=0; res<resolution.length; res++){
print(resolution[res]["name"]);
}
print(resolution.first);
print(resolution[0]["name"]);
modelSelect = 'twoK';
// name을 하나 선택하면 각 변수에 Map의 값을 할당하는 방법
for(var res in resolution){
if(res["name"] == modelSelect){
modelName = modelSelect;
modelColumn = res["column"];
modelRow = res["row"];
print('Model Name : $modelName, column is $modelColumn, row is $modelRow');
}
}
// for문을 돌리지 않고 가능한지?
}
// 결과
fourK
twoK
fourK
twoK
{name: fourK, column: 3840, row: 2160}
fourK
Model Name : twoK, column is 1920, row is 1080
for문을 안돌리고 하는 방법이 없을까?
하드웨어 하는 사람들은 쓸데없이 이런거 생각 함. ㅠㅠ
순서가 일정하니 Map이 굳이 필요없어 보여 List만 가지고 구현.
class ModelInfo{
String modelName="";
double modelColumn=0;
double modelRow=0;
ModelInfo(this.modelName, this.modelColumn, this.modelRow);
@override
String toString(){
return 'Model Name : $modelName, column is $modelColumn, row is $modelRow';
}
}
void findUsingLoop(List<ModelInfo> model, String modelSelect){
final stopwatch = Stopwatch()..start();
// for(var i in model){
for(var i = 0; i<model.length; i++){
if(model[i].modelName == modelSelect){
print('Using Loop:\n ${model[i]}');
print('${stopwatch.elapsed}');
return;
}
}
}
void findUsingFirstWhere(List<ModelInfo> model, String modelSelect){
final stopwatch = Stopwatch()..start();
final foundModel = model.firstWhere((element) =>
element.modelName == modelSelect,
// orElse:(){return null}
);
print('Using FirstWhere:\n $foundModel');
print('${stopwatch.elapsed}');
}
void findUsingSingleWhere(List<ModelInfo> model, String modelSelect){
final stopwatch = Stopwatch()..start();
final foundModel = model.singleWhere((element) =>
element.modelName == modelSelect,
// orElse:(){return null}
);
print('Using SingleWhere:\n $foundModel');
print('${stopwatch.elapsed}');
}
void findUsingWhere(List<ModelInfo> model, String modelSelect){
final stopwatch = Stopwatch()..start();
final foundModel = model.where((element) =>
element.modelName == modelSelect,
);
if(foundModel.isNotEmpty){
print('Using Where:\n ${foundModel.first}');
print('Using Where:\n $foundModel');
print('${stopwatch.elapsed}');
}
}
void findUsingRetainWhere(List<ModelInfo> model, String modelSelect){
Stopwatch stopwatch = new Stopwatch()..start();
model.retainWhere((element) =>
element.modelName == modelSelect,
);
if(model.isNotEmpty){
print('Using RetainWhere:\n ${model[0]}');
print('Using RetainWhere:\n $model');
print('${stopwatch.elapsed}');
}
}
void main() {
final model = [
ModelInfo('fourK', 3840, 2160),
ModelInfo('twoK', 1920, 1080),
];
final modelSelect = 'twoK';
findUsingLoop(model, modelSelect);
findUsingFirstWhere(model, modelSelect);
findUsingSingleWhere(model, modelSelect);
findUsingWhere(model, modelSelect);
findUsingRetainWhere(model, modelSelect);
}
// 결과
Using Loop:
Model Name : twoK, column is 1920, row is 1080
0:00:00.000000
Using FirstWhere:
Model Name : twoK, column is 1920, row is 1080
0:00:00.000200
Using SingleWhere:
Model Name : twoK, column is 1920, row is 1080
0:00:00.000101
Using Where:
Model Name : twoK, column is 1920, row is 1080
Using Where:
(Model Name : twoK, column is 1920, row is 1080)
0:00:00.000100
Using RetainWhere:
Model Name : twoK, column is 1920, row is 1080
Using RetainWhere:
[Model Name : twoK, column is 1920, row is 1080]
0:00:00.000000
List의 내용을 열몇개로 늘려봐도 (내가 사용하는 정도)
빠른 순서도 왔다갔다 하고, 뭐 크게 차이가 나는게 없다.
for 루프 써도 됨.
'재개발' 카테고리의 다른 글
출시 1차시도 실패. ㅋ (1) | 2023.01.07 |
---|---|
List, Map 조금 더 (0) | 2023.01.05 |
iOS 테스트 후 출시 (0) | 2023.01.01 |
안드로이드 테스트 후 출시 (0) | 2023.01.01 |
이쯤에서 코드 리펙토링 (0) | 2022.12.31 |