Mở đầu
Bài viết này giúp bạn biết được node RemoveNulls của package DynaMEP có gì lợi hại hơn các gói thông thường nhé.
Xóa bỏ null trong danh sách không phải là mới nhưng một vấn đề rất lớn với xử lí đó là việc bạn giữ lại cấu trúc cấp danh danh sách đang thực hiện thì hiện tại mình chưa thấy gói nào hỗ trợ.Việc tái tạo lại danh sách và cấu trúc sau khi xóa bỏ null trong danh sách là một việc làm hết sức rườm rà và khó khăn.Chính vì thế mình đã viết lại node này.
Null là gì ?
Null chính là một khái niệm cơ bản nhất trong nhiều ngôn ngữ lập trình.Hiểu thật đơn giản nhất chính là không có gì.Những khái niệm trừu tượng khác như chuỗi trống, không giá trị, giá trị không hay không định nghĩa sẽ không được mình đề cập trong bài viết này.
Nếu một tham chiếu trỏ đến null
, điều đó đơn giản có nghĩa là không có giá trị nào được liên kết với nó.Như vậy null chỉ nên được phép khi tham chiếu đối tượng 'không có giá trị nào được liên kết với nó' có ý nghĩa.
Trong Python , đối tượng null
là singleton None
.
Điểm mới
Bạn có thể xóa bỏ dữ liệu null
nhưng vẫn giữ lại cấu trúc để làm cho công việc tiếp theo.Việc gán lại dữ liệu phía sau đúng với đối tượng hiện tại trong cùng một nhóm, mỗi nhóm một giá trị khác nhau sẽ dễ dàng hơn cho bạn rất nhiều.
Nếu bạn muốn làm với một danh sách nào đó bất kì thì sao.Tất nhiên sẽ có cách để làm như các node thông thường khác.Bạn chỉ việc duỗi thằng đám danh sách kia ra và chuyển node RemoveNulls
về level @L1
.Đúng là một công đôi việc phải không :D
Nếu bạn là người yêu thích viết mã thì cũng thử với một script python tùy chỉnh xem sao
# Copyright (c) 2014, Nathan Miller | |
# The Proving Ground, http://TheProvingGround.org | |
import clr | |
clr.AddReference('ProtoGeometry') | |
from Autodesk.DesignScript.Geometry import * | |
#The input to this node will be stored in the IN[0] variable. | |
input = IN[0] | |
if not hasattr(input, "__iter__"): | |
input = [input] | |
cleanlist = [] | |
for i in input: | |
if hasattr(i, "__iter__"): | |
for ii in i: | |
if not (i is None): | |
cleanlist.append(i) | |
else: | |
if not (i is None): | |
cleanlist.append(i) | |
#Assign your output to the OUT variable | |
OUT = cleanlist |
Tổng kết
Tất nhiên các nhu cầu trên đều do quá trình làm việc và thực nghiệm của mình và viết thành, hi vọng một ngày nào đó bạn cũng sẽ gặp trường hợp túng quẩn này và sử dụng node này như một nghệ thuật.Cám ơn các bạn đã ghé thăm blog.