선택한 고유한 행과 행 번호에서 연관 배열 만들기안녕 모두,
주제가 과학 또는 수학인 행을 선택한 테이블이 있습니다(select where 함수 사용). 이제 특정 열의 고유 항목으로 선택된 모든 행 번호를 저장하는 연관 배열을 만들고 싶습니다.
그런 다음 연관 배열의 모든 키에 대한 루프를 시작하고 싶습니다. 각 값에 대해 key[i]에서 Key[i+1]까지의 행을 하위 집합으로 만듭니다.
예를 들어:
| 행_번호 | 학생 | 순서 | 주제 |
| 1 | ㅏ | 1 | 경제학 |
| 2 | ㅏ | 2 | 과학 |
| 삼 | ㅏ | 4 | 물리학 |
| 4 | ㅏ | 5 | 수학 |
| 5 | ㅏ | 2 | 과학 |
| 6 | ㅏ | 4 | 화학 |
| 7 | ㅏ | 6 | 과학 |
| 8 | ㅏ | 2 | 수학 |
| 9 | ㅏ | 1 | 사회의 |
*파란색 행은 select where 기능을 사용하여 선택했습니다.
- 연관 배열을 저장하는 변수를 만들고 싶습니다: ["Science" => {2,5,7}], "Math" => {4,8}].
- 그런 다음 3개의 테이블을 하위 집합으로 생성하고 생성하는 두 키에 대한 루프를 만들고 싶습니다.
- 표 1: 행 번호 2에서 5까지
- 표 2: 행 번호 5에서 7까지
- 표 3 : 행 번호 4에서 8까지
어떻게 해결할 수 있는지 도와주세요.
감사해요 
Re: 선택한 고유 행과 행 번호에서 연관 배열을 만듭니다.원하는 부분집합 테이블을 얻으려면 Ian 코드의 마지막 부분을 수정하여 아래와 같이 표시합니다. 특히 Ian의 i-인덱스 for 루프 내에 (새) j-인덱스 for 루프를 중첩합니다.
건배,
브래디
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
for(j = 1, j<=nitems(found_rows)-1, j++,
dt << subset(rows(found_Rows[j] :: found_Rows[j+1]));
)
);
show(subject_aa);
Re: 선택한 고유 행과 행 번호에서 연관 배열을 만듭니다.@pmroz 다음 항목에 추가할 수 있는 대부분의 작업을 수행했습니다.
NamesDefaultToHere(1);
dt = New Table( "Subjects",
Add Rows( 9 ),
New Column( "Student",
Character( 16 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} )
),
New Column( "Sequence",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] )
),
New Column( "Subject",
Character( 16 ),
"Nominal",
Set Values(
{"Economics", "Science", "Physics", "Math", "Science", "Chemistry", "Science", "Math", "Social"}
)
)
);
// Make any row selection (in this case, the 'blue' rows)
dt << selectRows({2, 4, 5, 7, 8 });
// Get key list from the current row selection
subjectVals = Column(dt, "Subject")[dt << getSelectedRows];
key_list = AssociativeArray(subjectVals) << getKeys;
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);
편집기에서 JSL 키워드를 마우스 오른쪽 버튼으로 클릭하고 'Help Scripting Index'를 수행하여 자세한 정보를 얻으십시오.
귀하의 예를 사용하여 연관 배열이 있으면 원하는 테이블의 사양이 명확하지 않았습니다.
Re: 선택한 고유 행과 행 번호에서 연관 배열을 만듭니다.@pmroz 답장을 보내 주셔서 감사합니다.
내 데이터 세트가 매우 커서 이 접근 방식을 사용하면 시간이 더 걸릴 수 있습니다.
또한 내 key_list는 고정되어 있지 않습니다. 특정 텍스트가 포함되어 있는지 여부에 따라 조건에 따라 다릅니다.Re: 선택한 고유 행과 행 번호에서 연관 배열을 만듭니다.이 코드로 시작할 수 있습니다.
dt = New Table( "Subjects", Add Rows( 9 ),
New Column( "Student", Character( 16 ), "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} ) ),
New Column( "Sequence", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] ) ),
New Column( "Subject", Character( 16 ), "Nominal",
Set Values( {"Economics", "Science", "Physics", "Math", "Science", "Chemistry",
"Science", "Math", "Social"} ) )
);
key_list = {"Science", "Math"};
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);